"use strict";

var exec = require("child_process").exec;

module.exports = function (grunt) {
    var rpreversion = /(\d\.\d+\.\d+)-pre/;

    grunt.registerTask("release",
        "Release a version of sizzle, updates a pre version to released, " +
        "inserts `next` as the new pre version", function (next) {

            if (!rpreversion.test(next)) {
                grunt.fatal("Next version should be a -pre version (x.x.x-pre): " + next);
                return;
            }

            var done,
                version = grunt.config("pkg.version");
            if (!rpreversion.test(version)) {
                grunt.fatal("Existing version is not a pre version: " + version);
                return;
            }
            version = version.replace(rpreversion, "$1");

            done = this.async();
            exec("git diff --quiet HEAD", function (err) {
                if (err) {
                    grunt.fatal("The working directory should be clean when releasing. Commit or stash changes.");
                    return;
                }
                // Build to dist directories along with a map and tag the release
                grunt.task.run([
                    // Commit new version
                    "version:" + version,
                    // Tag new version
                    "tag:" + version,
                    // Commit next version
                    "version:" + next
                ]);
                done();
            });
        });
};
